package com.ydlclass.serialization;

import com.ydlclass.annotation.SPI;

@SPI
public interface Serializer {
    /**
     * 序列化方法
     *
     * @param obj 要序列化的对象
     * @return 字节数组
     */
    byte[] serialize(Object obj);

    /**
     * 反序列化
     *
     * @param bytes 序列化后的字节数组
     * @param clazz 目标类
     * @param <T>   泛型类型，未知的类型可以使用 {@code Class<?>}
     * @return 反序列化的对象
     */
    <T> T deserialize(byte[] bytes, Class<T> clazz);

    /**
     * 获取编码的code值
     * @return 该序列化方式的编码标识位
     */
    byte getCode();
}